﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

/// <summary> 
/// 重写的TabControl控件 带关闭按钮
/// </summary>
public partial class MyTabControl : TabControl
{
    public MyTabControl()
    {
        InitializeComponent();
    }

    private int iconWidth = 16;
    private int iconHeight = 16;

    protected override void OnDrawItem(DrawItemEventArgs e)//重写绘制事件。
    {
        Graphics g = e.Graphics;
        Rectangle r = this.GetTabRect(e.Index);
        if (e.Index == this.SelectedIndex)    //当前选中的Tab页，设置不同的样式以示选中
        {
            g.FillRectangle(Brushes.White, r); //改变选项卡标签的背景色 
        }
        else//非选中的
        {
            g.FillRectangle(Brushes.Gray, r); //改变选项卡标签的背景色    
        }
        string title = this.TabPages[e.Index].Text;
        g.DrawString(title, this.Font, new SolidBrush(Color.Black), new PointF(r.X + 3, r.Y + 6));//PointF选项卡标题的位置 
        r.Offset(r.Width - iconWidth - 3, 2);
        g.DrawImage(icon, new Point(r.X - 2, r.Y + 2));//选项卡上的图标的位置 
    }

    //关闭按钮功能 
    protected override void OnMouseClick(MouseEventArgs e)
    {

        if (e.Button == MouseButtons.Left)
        {
            Point p = e.Location;
            int x = e.X, y = e.Y;
            Rectangle r = this.GetTabRect(this.SelectedIndex);
            r.Offset(r.Width - iconWidth - 3, 2);
            r.Width = iconWidth;
            r.Height = iconHeight;
            string str = string.Format("矩形{0}/{1}/{2}/{3}-{4}/{5}----{6}/{7}", r.X, r.Right, r.Y, r.Bottom, r.Width, r.Height, p.X, p.Y);
            //r.Contains(p)
            bool bl = x >= r.X && x <= r.Right && y >= r.Y && y <= r.Bottom;
            if (bl) //点击特定区域时才发生 
            {
                this.TabPages.Remove(this.SelectedTab);
            }
            if (this.TabPages.Count == 0)
            {
                this.Visible = false;
            }
        }
    }
        #region 多选项卡界面使用
    ////判断选项卡是否存在某窗体
    //private bool Estimate_Tab(string str)
    //{
    //    bool bl = true;
    //    //遍历选项卡判断是否存在该子窗体   
    //    foreach (Control con in myTabControl.Controls)
    //    {
    //        TabPage tab = (TabPage)con;
    //        if (tab.Name == str)
    //        {
    //            bl = false;//存在
    //            break;
    //        }
    //    }
    //    return bl;
    //}
    ////增加一个选项卡-新增窗体
    //private void Add_TabControl(string FrmName, Form frm)
    //{
    //    TabPage tap = new TabPage();
    //    tap.Text = FrmName + "        ";
    //    tap.Name = FrmName;
    //    myTabControl.TabPages.Add(tap);
    //    myTabControl.SelectedTab = tap;
    //    myTabControl.SelectedTab.Controls.Add(frm);
    //    myTabControl.Visible = true;
    //    frm.Dock = DockStyle.Fill;
    //    frm.Show();

    //}
    ////删除一个选项卡-删除窗体
    //public void Delete_TabControl(string Name)
    //{
    //    for (int i = 0; i < myTabControl.TabPages.Count; i++)
    //    {
    //        if (myTabControl.TabPages[i].Name == Name)
    //        {
    //            myTabControl.TabPages.RemoveAt(i);
    //            break;
    //        }
    //    }
    //    if (myTabControl.TabPages.Count == 0)
    //    {
    //        myTabControl.Visible = false;
    //    }
    //}
#endregion
}
